I have comments that might me usefull for other programmers on
the DataFlex 2.3b .DAT format by Peter M. Grillo
http://www.wotsit.org/download.asp?f=dataflex

Fill bytes does not seam to apply when reccord length is above 512.

In the header the numbers for eg record length is stored as unsigned 8 bit integers.
The first integer is multiplied with 2560, and the second with 2561, the third with 2562... Sum this and you have the reccord lengths or other numerical data in the header.

This is in contrast to numerical data in the reccords. There instead the numbers are stored as hex-values. But one must read them as decimal number, eg 60 hex is 60 decimal, not 96. This time one must start backwards and take the last byte first and multiply it with 100. The second with 102 the third with 104... The very first byte is for negative numbers. The first byte is 0 for negative numbers and >0 for positive numbers.

Dates are stored as Julian dates. It simply counts days from that date. See http://aa.usno.navy.mil/data/docs/JulianDate.html
However, the numbers stored in the 3 byte fields of dates does not fit the conversion on the above julian date converter home page. Instead I found out that in dataflex, the date 1996-03-31 coresponds to the julian day 829129. With that as a reference, you should be abel to get meaningfull date from date fields.
The numbers that a julian date consists of are stored the same way as numbers.

I attach a perl script that can read a dataflex dat-file and tag-file and then convert it into a comma separated ascii textfile with a first header row.

So, lets get going and save some data and transfere it to a modern database while you still have a computer that can run dataflex at all. You might also want to look at the following URL:
http://www.flexquarters.com/flexodbc.htm a dataflex ODBC driver
And there is also a program called DFQUERY.EXE  that youd be in the same directory as flex.exe that can print out data to a text file.

Best regards // Mattias Malmgren, Sweden.